package com.demo.services;

import com.demo.model.Article;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @Author quan
 * @Description 帖子类
 * @Date 2023/8/12 11:25
 */
public interface IArticleService {
    /**
     * 查询所有的帖子集合
     * @return List<Article>
     */
    List<Article> selectAll();

    /**
     * 根据boardId帖子表查询对应的帖子信息
     * @param boardId 版块id
     * @return List<Article>
     */
    List<Article> selectByBoardId(Long boardId);

    /**
     * 发布帖子，insert到数据库
     * @param article
     */
//    @Transactional
    void create(Article article);

    /**
     * 根据帖子id查询帖子信息：三表查询
     * @param id 帖子Id
     * @return Article
     */
    Article selectById(@Param("id") Long id);

    /**
     * 通过帖子id更新帖子访问数
     * @param id 帖子Id
     * @return row
     */
    void updateVisitCountById(Long id);

    /**
     * 动态根据帖子id更新帖子信息
     * @param id 帖子id
     * @param title 帖子标题
     * @param content 帖子内容
     */
    void modify(Long id,String title,String content);

    /**
     * 根据帖子id更新帖子点赞数
     * @param id 帖子Id
     * @return 受影响的行数
     */
    void updateLikeCountById(Long id);

    /**
     * 根据帖子Id帖子
     * @param id 要更新的帖子id
     * @return int受影响的行数
     */
    void deleteById(Long id);

    /**
     * 通过帖子Id更新帖子内容
     * @param id 帖子Id
     * @return 返回受影响的行数row
     */
    void updateById(Long id);

    /**
     * 通过用户Id查询帖子列表：帖子表和板块表关联
     * @param userId
     * @return
     */
    List<Article> selectByUserId(Long userId);
}
